package com.hunliji.monitor.share.component.sharding.impl;

import com.hunliji.monitor.share.component.sharding.ShardingFacade;
import com.hunliji.monitor.share.utils.DateCommonUtil;
import com.hunliji.monitor.share.utils.StringCommonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 分片方法
 * @author wuchen
 */
@Slf4j
@Component
public class ShardingFacadeImpl implements ShardingFacade {
    /**
     * 默认的按照年中的天分表的----天数
     */
    private static final Integer DEFAULT_YEAR_DAY = 366;
    /**
     * 默认的按照年中的天分表的-后缀的固定长度
     */
    private static final Integer DEFAULT_YEAR_DAY_SUFFIX_LEN = 3;

    /**
     * 获取表名-规则为天在年中的分布
     * 一年按照366天进行计算，然后记录时间在一年中位于第几天，则该记录就分布在第几张表中
     * @param date：记录时间
     * @param tablePrefix：表前缀
     * @return
     */
    @Override
    public String getTableNameForDayToYear(Date date, String tablePrefix) {
        Integer dayToYear = DateCommonUtil.getDayToYear(date);
        String suffix = StringCommonUtil.getFormatFromInteger(dayToYear,DEFAULT_YEAR_DAY_SUFFIX_LEN);
        String tableName = tablePrefix+"_"+suffix;
        return tableName;
    }
}
